import { getToken, setToken, removeToken, setTimeStamp } from "@/utils/auth"
import { login, getUserInfo, getUserDetailById } from "@/api/user"
// 状态
const state = {
        token: getToken(), // 设置token为共享状态 初始化的时候就先从缓存中读取
        userInfo: {} // 这里定义一个空对象
    }
    // 修改状态
const mutations = {
    setToken(state, token) {
        state.token = token // 将数据设置给vuex
            // 同步给缓存
        setToken(token)
    },
    removeToken(state) {
        state.token = null // 将vuex的数据置空
        removeToken() // 同步缓存
    },
    setUserInfo(state, result) {
        // 更新一个对象
        state.userInfo = result // 这样是响应式
    },
    removeUserInfo(state) {
        state.userInfo = {}
    }
}
const actions = {
        async login(context, data) {
            // 调用api接口
            const result = await login(data) // 拿到token
                // axios默认加了一层data
                // if (result.success) {
                //如果为true 表示登录成功
            context.commit('setToken', result) // 设置token
                //拿到token说明登录成功
            setTimeStamp() //设置当前时间戳
                // }
        },
        async getUserInfo(context) {
            const result = await getUserInfo()
                // 获取用户的详情
            const baseInfo = await getUserDetailById(result.userId)
            context.commit('setUserInfo', {...result, ...baseInfo }) // 提交到mutations
            return result //后期做权限时候的伏笔

        },
        // 登出
        logout(context) {
            // 删除token
            context.commit('removeToken')
                //删除用户资料
            context.commit('removeUserInfo')
        }

    }
    // 执行异步
export default {
    namespaced: true,
    state,
    mutations,
    actions
}